﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using WLMCoreLibrary;
using SAW_Core;
using System.Data;
using System.Data.Odbc;
using System.Text;
using System.Configuration;
using System.IO;

namespace SAW
{
    public partial class ModuloCompras : System.Web.UI.Page
    {
        dbConnector ConexionDB;
        protected override void OnUnload(EventArgs e)
        {
            //ConexionDB.CloseConnection();
            base.OnUnload(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {


            ConexionDB = new dbConnector();
            FuncionesLocales.CheckPagePermision(ref ConexionDB);

            FuncionesLocales.ManejarMensaje();

            if (Request.QueryString["repCompras"] != null)
            {
                PanelGridCompraes.Visible = false;
                PanelReporteCompras.Visible = true;
            }

            if (Request.QueryString["RealizarPagoCompra"] != null && Request.QueryString["idCompra"] != null)
            {
                //Response.Write(Request.QueryString["escheque"] + Request.QueryString["AplicarPago"]);
                //Response.End();
                RegistrarPagoCompra(Convert.ToInt32(Request.QueryString["idCompra"]), Convert.ToInt32(Request.QueryString["idCuentaBancaria"]), WLMFunctions.MonedaADecimal(Request.QueryString["TotalPago"]), Convert.ToDateTime(Request.QueryString["fechaPago"]), Request.QueryString["NoDocumento"], Convert.ToBoolean(Request.QueryString["esCheque"]), Convert.ToBoolean(Request.QueryString["AplicarPago"]));
            }

            if (Request.QueryString["impresion"] != null)
                if (Request.QueryString["idCompra"] != null)
                {
                    int idTipoStatus = Convert.ToInt32(Request.QueryString["idStatus"]);
                    GenerarPDFDocumento(Convert.ToInt32(Request.QueryString["idCompra"]), idTipoStatus, true);
                }

            if (Request.QueryString["email"] != null)
            {
                EnviarCompraEmail(Convert.ToInt32(Request.QueryString["idCompra"]), Request.QueryString["mensajePersonal"]);
            }

            if (Request.QueryString["listado"] == "true")
                ListadoJSON();
            BloquearBotonesCompraes();
            if (Request["AddNew"] != null)
            {
                PanelGridCompraes.Visible = false;
                PanelAltaCompra.Visible = true;
                FechaVencimientoCompra.Text = DateTime.Now.AddDays(15).ToString("dd/MM/yyyy");
                BloquearBotonesCompraes();
                addCompraButton.Enabled = true;

            }
            else
                if (Request.QueryString["idCompra"] != null && !IsPostBack)
                {
                    if (Request.QueryString["eliminar"] != null)
                        eliminarCompra(Convert.ToInt32(Request.QueryString["idCompra"]));
                    DetalleCompra(Convert.ToInt32(Request.QueryString["idCompra"]));
                }
        }


        protected void GuardarCompra(bool redireccionar)
        {
            Compra compra;
            if (idCompraMostrada.Value == "0")
                compra = new Compra(ref ConexionDB);
            else
                compra = new Compra(Convert.ToInt32(idCompraMostrada.Value),ref ConexionDB);
            compra.idProveedor = Convert.ToInt32(idClienteCompra.Value);
            compra.NombreCliente = NombreClienteCompra.Text;
            compra.NombreComercialCliente = NombreComercialClienteCompra.Text;
            compra.RFCProveedor = RFCClienteCompra.Text;
            compra.F_Calle = F_CalleCompra.Text;
            compra.F_NumeroExterior = F_NumeroExteriorCompra.Text;
            compra.F_NumeroInterior = F_NumeroInteriorCompra.Text;
            compra.F_Colonia = F_ColoniaCompra.Text;
            compra.F_Municipio = F_MunicipioCompra.Text;
            compra.F_Ciudad = F_CiudadCompra.Text;
            compra.F_Estado = F_EstadoCompra.Text;
            compra.F_CP = F_CPCompra.Text;
            compra.Calle = CalleCompra.Text;
            compra.NumeroExterior = NumeroExteriorCompra.Text;
            compra.NumeroInterior = NumeroInteriorCompra.Text;
            compra.Colonia = ColoniaCompra.Text;
            compra.Ciudad = CiudadCompra.Text;
            compra.Municipio = MunicipioCompra.Text;
            compra.Estado = EstadoCompra.Text;
            compra.CP = CPCompra.Text;
            compra.FechaVencimiento = Convert.ToDateTime(FechaVencimientoCompra.Text);
            compra.TiempoEntrega = TiempoEntregaCompra.Text;
            compra.CondicionesPago = CondicionesPagoCompra.Text;
            compra.Observaciones = ObservacionesCompra.Text;
            compra.SubTotal = WLMFunctions.MonedaADecimal(SubTotalCompra.Text);
            compra.Descuento = WLMFunctions.MonedaADecimal(DescuentoCompra.Text);
            //Compra.DescuentoPorcentaje =WLMFunctions.MonedaADecimal( DescuentoPorcentaje.Text);
            compra.IVA = WLMFunctions.MonedaADecimal(IVACompra.Text);
            compra.Total = WLMFunctions.MonedaADecimal(TotalCompra.Text);
            compra.idListaPrecios = Convert.ToInt32(idListaPreciosCompra.Value);
            compra.idCondicionesPago = Convert.ToInt32(idCondicionesPagoCompra.Value);
            compra.DiasCredito = new Condicionespago(compra.idCondicionesPago,ref ConexionDB).dias;
            compra.Save();
            for (int x = 1; x <= Convert.ToInt32(Request.Form["cantidadConceptosCompra"]); x++)
            {
                GuardarConceptoCompra(compra, x);

            }

            ConexionDB.CloseConnection();
            if (redireccionar)
            {


                Response.Redirect("/ModuloCompras.aspx");
            }

        }

        protected void GuardarConceptoCompra(Compra compra, int x)
        {

            if (Request["idProductoConceptoCompra" + x] != "0")
            {
                //Response.Write(Request["idProductoConcepto" + x]+Request["ConceptoEliminado" + x] + Request["cantidadConcepto" + x]);
                if (Request["ConceptoEliminadoCompra" + x] != "true" && Request["cantidadConceptoCompra" + x] != "0")
                {
                    CompraItem item;

                    if (Request["ConceptoCompraId" + x] == "0")
                        item = new CompraItem(ref ConexionDB);
                    else
                    {
                        item = new CompraItem(Convert.ToInt32(Request["ConceptoCompraId" + x]),ref ConexionDB);

                        decimal cantidadAjuste = item.Cantidad - WLMFunctions.MonedaADecimal(Request["cantidadConceptoCompra" + x]);
                        if (compra.Status == 4)
                            if (cantidadAjuste != 0)
                            {
                                Producto producto = new Producto(item.idProducto,ref ConexionDB);
                                Almacen almacen = new Almacen(compra.IdAlmacen,ref ConexionDB);
                                ProductoStock stock = new ProductoStock(producto, almacen,ref ConexionDB);
                                MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                                movimiento.stockInicial = stock.Stock;
                                stock.Stock -= cantidadAjuste;
                                movimiento.stockFinal = stock.Stock;

                                if (cantidadAjuste < 0)
                                {
                                    movimiento.entrada = true;
                                    movimiento.cantidadEntrada = Math.Abs(cantidadAjuste);
                                }
                                else
                                {
                                    movimiento.salida = true;
                                    movimiento.cantidadSalida = Math.Abs(cantidadAjuste);
                                }
                                movimiento.idProducto = producto.id;
                                movimiento.idAlmacen = almacen.id;
                                movimiento.idVenta = compra.id;
                                movimiento.fechaAplicacion = DateTime.Now;
                                movimiento.idProveedor = compra.idProveedor;
                                movimiento.TipoMovimiento = 4;//Devolucion
                                movimiento.Save();
                                stock.Save();
                            }
                    }


                    item.idCompra = compra.id;
                    item.idProducto = Convert.ToInt32(Request["idProductoConceptoCompra" + x]);
                    //item.medi = Request["unidadConceptoCompra" + x];
                    item.Clave = Request["claveConceptoCompra" + x];
                    item.Categoria = Request["categoriaConceptoCompra" + x];
                    item.Linea = Request["lineaConceptoCompra" + x];
                    item.Marca = Request["marcaConceptoCompra" + x];
                    item.Descripcion = Request["descripcionConceptoCompra" + x];
                    item.Precio = WLMFunctions.MonedaADecimal(Request["precioConceptoCompra" + x]);
                    item.Cantidad = WLMFunctions.MonedaADecimal(Request["cantidadConceptoCompra" + x]);

                    if (Request["ConceptoCompraId" + x] == "0"&&compra.Status==4)
                    { Producto producto = new Producto(item.idProducto,ref ConexionDB);
                            Almacen almacen = new Almacen(compra.IdAlmacen,ref ConexionDB);
                            ProductoStock stock = new ProductoStock(producto, almacen,ref ConexionDB);
                            MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                            movimiento.stockInicial = stock.Stock;
                            stock.Stock += item.Cantidad;
                            movimiento.stockFinal = stock.Stock;


                                movimiento.entrada = true;
                                movimiento.cantidadEntrada = item.Cantidad;
                                item.Status = 3;
                           
                            movimiento.idProducto = producto.id;
                            movimiento.idAlmacen = almacen.id;
                            movimiento.idVenta = compra.id;
                            movimiento.fechaAplicacion = DateTime.Now;
                            movimiento.idProveedor = compra.idProveedor;
                            movimiento.TipoMovimiento = 4;//Devolucion
                            movimiento.Save();
                            stock.Save();
                         }

                    item.Save();


                }
                else
                {
                    CompraItem item;
                    item = new CompraItem(Convert.ToInt32(Request["ConceptoCompraId" + x]),ref ConexionDB);
                    Response.Write(x + "Eliminado");
                    item.Delete();

                    if (compra.Status == 4  && item.Status==3)
                    {
                        Producto producto = new Producto(item.idProducto,ref ConexionDB);
                        Almacen almacen = new Almacen(compra.IdAlmacen,ref ConexionDB);
                        ProductoStock stock = new ProductoStock(producto, almacen,ref ConexionDB);
                        MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                        movimiento.stockInicial = stock.Stock;
                        stock.Stock -= item.Cantidad;
                        movimiento.stockFinal = stock.Stock;
                        movimiento.cantidadSalida = item.Cantidad;
                        movimiento.salida = true;
                        movimiento.idProducto = producto.id;
                        movimiento.idAlmacen = almacen.id;
                        movimiento.idVenta = compra.id;
                        movimiento.fechaAplicacion = DateTime.Now;
                        movimiento.idProveedor = compra.idProveedor;
                        movimiento.TipoMovimiento = 4;//Devolucion
                        movimiento.Save();
                        stock.Save();
                    }
                }
            }
            //if (Request["ConceptoEliminadoCompra" + idRequest] != "true" && Request["idProductoConceptoCompra" + idRequest] != "0" && Request["cantidadConceptoCompra" + idRequest] != "0")
            //{
            //    CompraItem item;
            //    if (Request["ConceptoCompraId" + idRequest] == "0")
            //        item = new CompraItem(ref ConexionDB);
            //    else
            //    {
            //        item = new CompraItem(Convert.ToInt32(Request["ConceptoCompraId" + idRequest]),ref ConexionDB);

            //        decimal cantidadAjuste = item.Cantidad - WLMFunctions.MonedaADecimal(Request["cantidadConceptoCompra" + idRequest]);
            //        if (cantidadAjuste != 0)
            //        {
            //            Producto producto = new Producto(item.idProducto,ref ConexionDB);
            //            Almacen almacen = new Almacen(compra.IdAlmacen,ref ConexionDB);
            //            ProductoStock stock = new ProductoStock(producto, almacen,ref ConexionDB);
            //            MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
            //            movimiento.stockInicial = stock.Stock;
            //            stock.Stock -= cantidadAjuste;
            //            movimiento.stockFinal = stock.Stock;

            //            if (cantidadAjuste < 0)
            //            {
            //                movimiento.salida = true;
            //                movimiento.cantidadEntrada =Math.Abs( cantidadAjuste);
            //            }
            //            else
            //            {
            //                movimiento.entrada = true;
            //                movimiento.cantidadSalida = Math.Abs(cantidadAjuste);
            //            }
            //            movimiento.idProducto = producto.id;
            //            movimiento.idAlmacen = almacen.id;
            //            movimiento.idCotizacion = compra.id;
            //            movimiento.fechaAplicacion = DateTime.Now;
            //            movimiento.idProveedor = compra.idProveedor;
            //            movimiento.TipoMovimiento = 4;//Devolucion
            //            movimiento.Save();
            //            stock.Save();
            //        }

            //    }
            //    item.idCompra = compra.id;
            //    item.idProducto = Convert.ToInt32(Request["idProductoConceptoCompra" + idRequest]);
            //    item.Clave = Request["claveConceptoCompra" + idRequest];
            //    item.Categoria = Request["categoriaConceptoCompra" + idRequest];
            //    item.Linea = Request["lineaConceptoCompra" + idRequest];
            //    item.Marca = Request["marcaConceptoCompra" + idRequest];
            //    item.Descripcion = Request["descripcionConceptoCompra" + idRequest];
            //    item.Precio = WLMFunctions.MonedaADecimal(Request["precioConceptoCompra" + idRequest]);
            //    item.Cantidad = WLMFunctions.MonedaADecimal(Request["cantidadConceptoCompra" + idRequest]);
            //    item.Save();
            //}
        }

        protected void CargarRegistro(int idRegistro)
        {
            Compra compra = new Compra(idRegistro,ref ConexionDB);

        }


        protected void EdicionCompra(Compra compra)
        {
            if (!IsPostBack || esDevolucion.Value == "1")
            {
                PanelAltaCompra.Visible = true;
                PanelGridCompraes.Visible = false;
                botonCompraAPedido.Enabled = true;
                idClienteCompra.Value = compra.idProveedor.ToString();
                NombreClienteCompra.Text = compra.NombreCliente;
                NombreComercialClienteCompra.Text = compra.NombreComercialCliente;
                RFCClienteCompra.Text = compra.RFCProveedor;
                F_CalleCompra.Text = compra.F_Calle;
                F_NumeroExteriorCompra.Text = compra.F_NumeroExterior;
                F_NumeroInteriorCompra.Text = compra.F_NumeroInterior;
                F_ColoniaCompra.Text = compra.F_Colonia;
                F_MunicipioCompra.Text = compra.F_Municipio;
                F_CiudadCompra.Text = compra.F_Ciudad;
                F_EstadoCompra.Text = compra.F_Estado;
                F_CPCompra.Text = compra.F_CP;
                CalleCompra.Text = compra.Calle;
                NumeroExteriorCompra.Text = compra.NumeroExterior;
                NumeroInteriorCompra.Text = compra.NumeroInterior;
                ColoniaCompra.Text = compra.Colonia;
                CiudadCompra.Text = compra.Ciudad;
                MunicipioCompra.Text = compra.Municipio;
                EstadoCompra.Text = compra.Estado;
                CPCompra.Text = compra.CP;
                FechaVencimientoCompra.Text = compra.FechaVencimiento.ToString("dd/MM/yyyy");
                TiempoEntregaCompra.Text = compra.TiempoEntrega;
                CondicionesPagoCompra.Text = compra.CondicionesPago;
                ObservacionesCompra.Text = compra.Observaciones;
                SubTotalCompra.Text = compra.SubTotal.ToString("C");

                DescuentoCompra.Text = compra.Descuento.ToString();
                IVACompra.Text = compra.IVA.ToString("C");
                TotalCompra.Text = compra.Total.ToString("C");
                idListaPreciosCompra.Value = compra.idListaPrecios.ToString();
                idCondicionesPagoCompra.Value = compra.idCondicionesPago.ToString();
                StringBuilder concep = new StringBuilder();
                concep.Append("<script>$(document).ready(function () {$('#botonEmailCompra').attr('disabled',false);\n$('#botonBorrarCompra').attr('disabled',false);\n");
                foreach (CompraItem item in compra.Conceptos)
                {
                    concep.Append("cargarConcaptoCompra('" + item.id + "','" + item.Cantidad + "','" + item.Clave + "','" + item.Categoria + "','" + item.Linea + "','" + item.Marca + "','" + item.Descripcion + "','" + item.Precio.ToString("C") + "','" + item.idProducto + "','" + item.Precio + "','" + item.Precio + "','" + item.Precio + "');\n");
                }
                concep.Append("});\ncheckBotonesActivos('BotonesCompras');</script>");
                CantidadConceptosCompra1.Value = compra.Conceptos.Count.ToString();
                ConceptosActuales.Text = concep.ToString();
                addCompraButton.Enabled = true;
                idCompraMostrada.Value = compra.id.ToString();
                Proveedor proveedor = new Proveedor(compra.idProveedor,ref ConexionDB);
                StringBuilder mailsEnvio = new StringBuilder();

                mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"alcliente\" rel='envioscompra' />" + proveedor.Email + "</label> <br>");
                ContactoCollection contactos = new ContactoCollection(proveedor,ref ConexionDB);
                foreach (Contacto cont in contactos.Elementos)
                {
                    mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"" + cont.id + "\" rel='envioscompra' />" + cont.Email + " </label><br>");
                }

                MailsProveedor.Text = mailsEnvio.ToString();
            }

        }


        protected void DetalleCompra(int noDocumento)
        {
            PanelAltaCompra.Visible = false;
            PanelGridCompraes.Visible = false;
            PanelCompraesDetalle.Visible = true;
            string rutaArchivos = ConfigurationManager.AppSettings["XMLComprasFolder"] + noDocumento.ToString("00000") + "/";
            Compra compra = new Compra(Convert.ToInt32(Request.QueryString["idCompra"]), true,ref ConexionDB);
            if (compra.Status == 1)
            {
                EdicionCompra(compra);
                return;
            }
            if (compra.Status == 4)
                botonCompraDevolucion.Enabled = true;
            compra.GenerarArchivoXML();
            DetalleCompraLabel.Text = WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + noDocumento.ToString("00000") + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + "comprapantalla.xsl");
            BloquearBotonesCompraes();
            idCompraMostrada.Value = compra.id.ToString();
            //Compraes - pedido - remision - salida - envio
            string botonesActivos = "$(document).ready(function () {\n$('#botonImprimirCompra').attr('disabled',false);";
            switch (compra.Status)
            {
                case 1:
                    botonCompraAPedido.Enabled = true;
                    botonesActivos += "$('#botonEmailCompra').attr('disabled',false);\n$('#botonBorrarCompra').attr('disabled',false);";
                    break;
                case 2:
                    botonARemision.Enabled = true;
                    botonEntradaCompra.Enabled = true;
                    botonesActivos += "$('#botonEmailCompra').attr('disabled',false);\n";
                    if (compra.SaldoPendiente > 10)
                        botonesActivos += "$('#botonPagoCompra').attr('disabled',false);\n$('#botonBorrarCompra').attr('disabled',false);";
                    break;
                case 3:

                    botonASalido.Enabled = true;
                    botonesActivos += "$('#botonEmailCompra').attr('disabled',false);\n";
                    if (compra.SaldoPendiente > 10)
                        botonesActivos += "$('#botonPagoCompra').attr('disabled',false);\n$('#botonBorrarCompra').attr('disabled',false);";
                    break;
                case 4:
                    //botonAEnvio.Enabled = true;
                    botonesActivos += "$('#botonEmailCompra').attr('disabled',false);\n";
                    if (compra.SaldoPendiente > 10)
                        botonesActivos += "$('#botonPagoCompra').attr('disabled',false);\n";
                    break;
                //case 5:


                //    break;                    
            }
            Response.Write("<script>" + botonesActivos + "});</script>");
            totalCompraActualDeuda.Value = compra.SaldoPendiente.ToString("C");

            //Cargando los contactos de el cliente para seleccionar los mail sa donde enviar la cotizacion

            Proveedor proveedor = new Proveedor(compra.idProveedor,ref ConexionDB);
            StringBuilder mailsEnvio = new StringBuilder();

            mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"alcliente\" rel='envioscompra' />" + proveedor.Email + "</label> <br>");
            ContactoCollection contactos = new ContactoCollection(proveedor,ref ConexionDB);
            foreach (Contacto cont in contactos.Elementos)
            {
                mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"" + cont.id + "\" rel='envioscompra' />" + cont.Email + " </label><br>");
            }

            MailsProveedor.Text = mailsEnvio.ToString();

        }

        private void BloquearBotonesCompraes()
        {
            addCompraButton.Enabled = false;
            botonCompraAPedido.Enabled = false;
            botonEntradaCompra.Enabled = false;
            botonARemision.Enabled = false;
            botonASalido.Enabled = false;
            Response.Write("<script>$(document).ready(function () {$('.botonesCompraes').attr('disabled','disabled')});</script>");
        }

        protected void addCompraButton_Click(object sender, EventArgs e)
        {
            GuardarCompra(true);
        }

        protected void ListadoJSON()
        {



            string FieldList = "SELECT C.id, C.NoPedido,C.NoRemision,C.NoSalida,DATE_FORMAT(c.FechaCreacion,'%d-%m-%Y'),if(C.FechaPedido>'1900-01-01',DATE_FORMAT(C.FechaPedido,'%d-%m-%Y'),'.') as Fpedido,if(C.FechaRemision>'1900-01-01',DATE_FORMAT(C.FechaRemision,'%d-%m-%Y'),'.') as FRemision,if(C.FechaEntrada>'1900-01-01',DATE_FORMAT(C.FechaEntrada,'%d-%m-%Y'),'.') as FSalida, CONCAT( if(saldoPendiente<=10,\"<span class='img pagado' title='Pagada'></span>\",\"<span class='img dineroAlerta' title='Saldo Pendiente'></span>\"),' ' ,S.nombreStatus) as status,NombreCliente,NombreComercialCliente,CONCAT('$ ',CAST(Format(Total,2) AS CHAR)) as Totala,CONCAT('$ ',CAST(Format(SaldoPagado,2) AS CHAR)) as SaldoPagadoa," +
                //Calculando los Formatos de los saldos pendientes de cada cotizacion en funcion de la fecha de pago
                "CONCAT('$ ',CAST(Format(SaldoPendiente,2) AS CHAR)) as SaldoPendientea,C.DiasCredito" +
                //Calculando dias de Vencimiento de la Cotizacion
            ",if(C.SaldoPendiente>10,(if(C.FechaPedido>'1900-01-01',(IF(C.FechaPedido+ INTERVAL C.diasCredito DAY<NOW(),datediff(now(),C.FechaPedido+ INTERVAL C.diasCredito DAY) ,0)),0)),0) as DiasVencidos,if(saldoPendiente<=10,'ok',IF(C.FechaPedido+ INTERVAL C.diasCredito DAY<NOW(),'critic','urgent')) as rowStatus"+
            " FROM COMPRAS C  LEFT JOIN COTIZACIONESSTATUS S ON S.id=C.status ";
            int dataPage = Convert.ToInt32(Request["page"]);
            int rowsPerPage = Convert.ToInt32(Request["rp"]);
            string sortname = Request["sortname"];

            string sortorder = Request["sortorder"];
            if (sortname == null) sortname = "id";
            if (sortorder == null) sortorder = "desc";
            string sort = "ORDER BY " + sortname + " " + sortorder;
            if (dataPage == 0) dataPage = 1;
            if (rowsPerPage == 0) rowsPerPage = 50;
            int start = ((dataPage - 1) * rowsPerPage);
            string where = "";
            string qtype = Request["qtype"];

            string clienteFiltrado = "";
            if (Request.QueryString["idProveedor"] != null)
                clienteFiltrado = " AND idProveedor='" + Request.QueryString["idProveedor"] + "' AND Status>1 AND SaldoPendiente>=10 ";
            if (Request.QueryString["todasCxP"] != null)
                clienteFiltrado = " AND Status>1 AND SaldoPendiente>=10 AND (C.FechaPedido BETWEEN '" + Convert.ToDateTime(Request.QueryString["fechaInicial"]).ToString("yyyy-MM-dd") + "' AND '" + Convert.ToDateTime(Request.QueryString["fechaFinal"]).AddDays(1).ToString("yyyy-MM-dd") + "') ";
            if (Request.QueryString["RepCompras"] != null)
                clienteFiltrado = " AND Status>1 AND (C.FechaPedido BETWEEN '" + Convert.ToDateTime(Request.QueryString["fechaInicial"]).ToString("yyyy-MM-dd") + "' AND '" + Convert.ToDateTime(Request.QueryString["fechaFinal"]).AddDays(1).ToString("yyyy-MM-dd") + "') ";
            if (Request["query"] != null) where = " WHERE activo=1 AND C.idListaPrecios>=0 AND " + qtype + " LIKE '%" + Request["query"] + "%' " + clienteFiltrado;
            else where = " WHERE activo=1 AND C.idListaPrecios>=0 AND C.status<>9 " + clienteFiltrado;
            string limit = "LIMIT " + start + ", " + rowsPerPage;

            string strCommand = FieldList + where + sort + " " + limit;


            WLMFunctions.JsonGrid(strCommand, FieldList, where, dataPage);

        }

        protected void botonCompraAPedido_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idCompra"] != null)
                ConvertirCompraAPedido(Convert.ToInt32(Request.QueryString["idCompra"]));
            ConexionDB.CloseConnection();
            Response.Redirect("/ModuloCompras.aspx?idCompra=" + Request.QueryString["idCompra"]);
        }

        protected void ConvertirCompraAPedido(int noCompra)
        {
            //GuardarCompra(false);
            Compra compra = new Compra(noCompra, true,ref ConexionDB);
            if (compra.Status == 1)
            {
                compra.ConvertirAPedido();
                ConexionDB.CloseConnection();
                Response.Redirect("/ModuloCompras.aspx");
            }
        }

        protected void BotonImprimirCompra_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idCompra"] != null)
                GenerarPDFDocumento(Convert.ToInt32(Request.QueryString["idCompra"]), 0, true);
        }

        protected string GenerarPDFDocumento(int noDocumento, int idStatusDocumento, bool mostrarPDF)
        {
            Compra compra = new Compra(noDocumento, true,ref ConexionDB);
            string rutaArchivos = "";
            rutaArchivos += "ComprasXML/" + noDocumento.ToString("00000") + "/";
            string nombreArchivo = compra.id.ToString("00000");

            PDFCreator pdf = new PDFCreator();
            //Generando un 
            string archivoTransformacion = "";
            string tipoPdf = "Compra";
            string nombreArchivoSalida = "";
            switch (idStatusDocumento)
            {
                case 1:
                    archivoTransformacion = "compraImpresion.xsl";
                    tipoPdf = "Compra";
                    nombreArchivoSalida = compra.id.ToString("00000");
                    break;
                case 2:
                    archivoTransformacion = "compraImpresion.xsl";
                    tipoPdf = "pedido";
                    nombreArchivoSalida = compra.NoPedido.ToString("00000");
                    break;
                case 3:
                    archivoTransformacion = "compraImpresion.xsl";
                    tipoPdf = "remision";
                    nombreArchivoSalida = compra.NoRemision.ToString("00000");
                    break;
                case 4:
                    archivoTransformacion = "compraImpresion.xsl";
                    tipoPdf = "salida";
                    nombreArchivoSalida = compra.NoSalida.ToString("00000");
                    break;
            }
            //ConexionDB.CloseConnection();
            pdf.CrearPDFdeHTML(WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + archivoTransformacion), tipoPdf + "-" + nombreArchivoSalida, rutaArchivos, false, mostrarPDF);
            return ConfigurationManager.AppSettings["sitePath"] + rutaArchivos + tipoPdf + "-" + nombreArchivoSalida + ".pdf";

        }

        protected void botonARemision_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idCompra"] != null)
            {
                Compra compra = new Compra(Convert.ToInt32(Request.QueryString["idCompra"]), true,ref ConexionDB);
                if (compra.Status == 2)
                {
                    compra.GenerarRemision();
                    ConexionDB.CloseConnection();
                }
            }
        }

        protected void botonASalido_Click(object sender, EventArgs e)
        {

        }

        protected void RegistrarPagoCompra(int idCompra, int idCuenta, decimal MontoPago, DateTime fechaPago, string noDocumento, bool esCheque, bool registrarPago)
        {
            Compra compra = new Compra(idCompra,ref ConexionDB);
            CuentaBancaria cuenta = new CuentaBancaria(idCuenta,ref ConexionDB);
            Proveedor proveedor = new Proveedor(compra.idProveedor,ref ConexionDB);

            SalidaDinero cheque = new SalidaDinero(ref ConexionDB);
            cheque.idCuenta = cuenta.id;
            cheque.idProveedor = compra.idProveedor;
            cheque.Monto = MontoPago;
            cheque.FechaPago = fechaPago;
            cheque.ANombreDe = proveedor.RazonSocial;
            cheque.idCompra = idCompra;
            if (esCheque)
            {
                cuenta.numeroUltimoCheque++;
                cuenta.Save();
                cheque.NoCheque = cuenta.numeroUltimoCheque;
            }
            cheque.Concepto = "Pago a Compra No. " + compra.id + " al proveedor " + cheque.ANombreDe;
            cheque.Save();
            if ((esCheque && registrarPago) || !esCheque)
            {
                int idMovimiento=cheque.RealizarPago();

                cheque.PagoChequeCompra(compra, new MovimientoBancario(idMovimiento, ref ConexionDB));
            }


            compra.Save();

            Response.Write("El Pago ha sido realizado a El Documento No. " + compra.id + " con numero de Pedido " + compra.NoPedido + "<br>Por un total de " + cheque.Monto.ToString("C") + " a la cuenta '" + cuenta.alias + "'");

            ConexionDB.CloseConnection();
            Response.End();

        }

        protected string EnviarCompraEmail(int idComptra, string MensajeParticular)
        {
            Compra compra = new Compra(idComptra, true,ref ConexionDB);
            compra.GenerarArchivoXML();
            GenerarPDFDocumento(idComptra, 1, false);
            

string rutaArchivos ="ComprasXML/"+ compra.id.ToString("00000")+"/";
string nombreArchivo = compra.id.ToString("00000");

string archivo = "<style>"+ File.ReadAllText(ConfigurationManager.AppSettings["sitePath"] + "xmlcss\\xslTrans.css")+"</style>"+ WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + "compraEmail.xsl");//GenerarPDFDocumento(idComptra, 1, false);
            string[] archivos = new string[1];
            archivos[0] = archivo;
            
            Proveedor proveedor = new Proveedor(compra.idProveedor,ref ConexionDB);
            string Mensaje = "Saludos "+proveedor.NombreComercial+" [" +proveedor.RazonSocial+ "] <br><br>Por este medio enviamos la Solicitud de Compra No. " + compra.id + "<br><br>" + MensajeParticular +"<br><br>"+archivo;
            List<MailBox> listaMails = new List<MailBox>();
            string[] listadoContactos = Request.QueryString["destinatarios"].ToString().Split('|');
            if (listadoContactos[0] == "alcliente")
                listaMails.Add(new MailBox(proveedor.NombreComercial, proveedor.Email));
            for (int x = 0; x < listadoContactos.Length; x++)
            {
                int sali = 0;
                if (WLMFunctions.TryParseToInt(listadoContactos[x].ToString(), out sali))
                {
                    Contacto cont = new Contacto(Convert.ToInt32(listadoContactos[x]),ref ConexionDB);
                    listaMails.Add(new MailBox(cont.Nombre + " " + cont.Apellidos, cont.Email));
                }

            }
            if(CurrentSystemUser.IdUsuario!=0)
                listaMails.Add(new MailBox(CurrentSystemUser.Email, CurrentSystemUser.Email));
            Mailer.Send(listaMails, "Envio de solicitud de Compra No. " + compra.id, Mensaje,null);
            StringBuilder emailsEnviados = new StringBuilder();
            foreach (MailBox ma in listaMails)
                if(ma.Nombre!=ma.Email)
                    emailsEnviados.Append(ma.Nombre+" ["+ma.Email + "]<br/>");
                else
                    emailsEnviados.Append(ma.Nombre + "<br/>");
            ConexionDB.CloseConnection();
            Response.Write("<script>parent.MostrarAlerta('Mensajes de Email enviados a:<br/>" + emailsEnviados.ToString() + "');</script>");
            Response.End();
            return "";
        }

        protected void botonCopiarCompra_Click(object sender, EventArgs e)
        {

        }

        protected void botonEntradaCompra_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idCompra"] != null)
            {
                Compra compra = new Compra(Convert.ToInt32(Request.QueryString["idCompra"]), true,ref ConexionDB);
                if (compra.Status == 2)
                {
                    compra.GenerarEntradaAlmacen();
                    ConexionDB.CloseConnection();
                    Response.Redirect("ModuloCompras.aspx?idCompra=" + compra.id + "&mensaje=El material de la compra fue agregado en el stock del sistema correctamente");
                }
            }
        }

        protected void eliminarCompra(Int32 idRegistro)
        {
            Compra compra = new Compra(idRegistro,ref ConexionDB);
            Proveedor proveedor = new Proveedor(compra.idProveedor,ref ConexionDB);
            compra.Delete();
            proveedor.SaldoActual -= compra.SaldoPendiente;
            proveedor.Save();
            string mensaje = "La compra ha sido dada de baja del sistema y el saldo pendiente eliminado de la cuenta de el proveedor!!";
            ConexionDB.CloseConnection();
            Response.Redirect("/moduloCompras.aspx?mensaje=" + mensaje);
        }



        protected void botonCompraDevolucion_Click(object sender, EventArgs e)
        {
            Compra cotizacion = new Compra(Convert.ToInt32(idCompraMostrada.Value), true, ref ConexionDB);
            PanelCompraesDetalle.Visible = false;
            PanelAltaCompra.Visible = true;
            PanelGridCompraes.Visible = false;
            esDevolucion.Value = "1";
            EdicionCompra(cotizacion);
        }

    }
}